<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Array对象</title>
</head>
<body>
    <script>
        
        // 回顾：什么是变量
        // 就是在内存中开辟一个合适的空间，用于存储一份数据
        // 什么叫合适的空间，比如数据：100和“Helloworld”不一样，所以他们所需要的空间也不一样
        // 什么是数组？
        // 就是在内存中开辟一段连续的空间，用于存储多分数据
        // 有两种方式定义数据。
        // 方式一：采用字面量赋值的方式定义数组。

        let arr1 = [100,200,300,400]
        console.log(arr1);  // [100, 200, 300, 400]

        // 获取数组中指定的数据，根据数组的下标(索引)，用于表示数据在数组中的位置
        // 注意：下标从0开始
        // 返回数组中指定下标里面保存的数据，方式是：数组对象[下标]

        console.log(arr1[1]);   // 200
        console.log(`数组的长度：${arr1.length}`); //数组的长度：4
        let v = arr1[arr1.length-1]
        console.log(v);     // 400
        
        // length属性，返回数组的长度
        // 返回数组的最后一个元素 length-1（数组的长度-1，就算是数组的最后一个下标）
        console.log('--------------------');

        // 方式二：采用构造函数方式创建数组

        let arr2= new Array()           // 创建一个数组对象，还没有开辟空间
        arr2[0] = 1000                  // 通过数组的下标给数组中指定的空间赋值
        arr2[1] = 2000
        console.log(arr2.length); // 2             // 通过数组的下标给数组中的指定的空间赋值

        // 在js中，创建数组，没有必要规定长度，因为js的数组，长度会变化

        console.log('----------');

        let arr3= new Array(3)              // 创建一个数组对象，先开辟3个空间
        console.log(arr3.length);   // 3    
        arr3[3] = 100
        console.log(arr3.length);   // 4

        console.log('----------123------------------');

        let arr = [11,22,33,44,55]
        console.log(arr); //(5) [11, 22, 33, 44, 55]
        arr.push(66)
        console.log(arr); //(6) [11, 22, 33, 44, 55, 66]

        // push()方法，用于向数组的末尾添加数据
        // pop()方法，用于删除并返回数组中最后一个元素 
        console.log('----------121111------------------');

        let a = arr.pop()
        console.log(arr); //(5) [11, 22, 33, 44, 55]
        console.log(a);   // 66

        // unshift()方法，用于向数组的开头添加数据

        arr.unshift(100)
        console.log(arr); //(6) [100, 11, 22, 33, 44, 55]
        
        // shift()方法，用于删除并返回数组中的第一个元素
        console.log('----------121111------------------');

        let b = arr.shift()
        console.log(arr);   //(5) [11, 22, 33, 44, 55]
        console.log(b);     //100


        console.log('------123123----------------');
        
        // indexOf()用于从数组中查找指定的数据第一次出现的 位置（下标）
        
        let c = arr.indexOf(33)
        console.log(c); // 2
        let d =arr.indexOf('1234') // 查找不到返回-1
        console.log(d); // -1

        // lastIndexOf() 方法用于从数组中查找指定的数据最后一次出现的位置

        let e = arr.lastIndexOf(33)
        console.log(e); // 2
        let f = arr.lastIndexOf('1234') // 查找不到返回-1
        console.log(f); // -1

        // slice()方法，返回数组中指定区间的数据
        // 第一个参数是其实下标，第二个参数是结束下标
        // 能取到起始位置，取不到结束位置。可以取到[3][4][5]
        console.log('------123123----------------');

        console.log(arr);   //(5) [11, 22, 33, 44, 55]
        let g = arr.slice(3,6)
        console.log(g);     //(2) [44, 55]
        console.log(arr);   //(5) [11, 22, 33, 44, 55]

        // slice()方法，如果只传1个参数，表示从其实位置往后全部返回
        console.log('----------------------');

        let h = arr.slice(3)
        console.log(h); //(2) [44, 55]

        // 如果结束位置超出数组长度，也是直接返回放到最后。

        let i = arr.slice(3,20)
        console.log(i); //(2) [44, 55]
        

      
    </script>
</body>
</html>